package com.season.seasonStudy.javase.j_007_string;
/**
 * 是什么？
	是char型数组！！

	 String 和StringBuffer
		  	字符串内置字符数组
	1	字符串任何方法都不是在原先的字符串空间内改变， 
		而是新开空间，所以原先的字符串变量不会发生改变
		只是返回值发生了改变
		不建议使用String 进行字符串拼接 无论使用+或 concat方法（浪费空间）
		可以作为特殊的值传递使用
		 		String a="aaa";
		 		String b=a;
		 		b=b.concat(" hello");
		 		b 改变了
		 		a 不会发生任何变化；
 	2	 字符串常量在常量池中只开一次空间
	3 	 每次new 对象都是新开空间

	4        常用方法：


		 *  A	int 长度=对象.length();//字符串长度

			int------------>char

		 *  A	char 变量=对象.charAt(下标)；//根据下标获取对应位置的字符

			String,（int可写可不写)（从左开始查找）------------>int

		 *  B	int 找到的位置=被查找对象.indexOf("查找字符",查找起始位置) ；
		 *  	        （从字符串左边开始向右找，找第一个出现的位置，返回-1说明没找到，
		 * 		第二个参数不写表示从索引0位置开始 查找）

			String,（int可写可不写)（从右开始查找）------------>int

		 *  C	int 找到的位置=被查找对象.lastIndexOf("查找字符",查找起始位置) ；
		 * 		（从字符串右边开始向左找，找第一个出现的位置，返回-1说明没找到，
		 * 		第二个参数不写表示从索引长度减一位置开始 查找）

	int,(int)(可写可不写)------------>String

		 *  D	String 截取结果=对象.substring(起始位置，结束位置)；
		 *  		（截取子串，包含起始位置，不包含结束位置，第二个参数不写表示截取到最后）

			String------------>String[]
 
		 *  E   String[] 分割结果=对象.split("用于分割的字符串");
		 *  	(分割结果不包含分割字符串,注意分个字符串在两头的情况（参数可用正则表达式）) ;

			String------------>boolean

		 *  F   boolean 是否忽略大小写相等=字符串1.equalsIgnoreCase(字符串2)
		 *  	（字符串1和字符串2在忽略大小写后是否相等）
		 *  G   String 大写结果=对象.toUpperCase();
		 *  H   String 小写结果=对象.toLowerCase();
		 *  I   String 拼接结果=对象.concat(字符串2);
		 *  J   boolean 是否以字符串2开头=fileName.startsWith(字符串2);
		 *  K	boolean 是否以字符串2结尾=fileName.endsWith(字符串2);
		 *  L	String 替换结果=被替换对象.replaceAll(要替换的字符, 替换成的字符串);
		 *  	(将字符串对象中的所有的 第一个参数的字符串（可用正则表达式），替换成第二个参数);
		 *  M	boolean 是否匹配=对象.matches(正则表达式);
		 *  	正则表达式：
		 *  		[罗列字符范围]代表范围内的一个字符
		 *  		[^罗列字符范围]代表不在范围内的一个字符
		 *  		{数字1，数字2}代表前面的字符匹配次数，数字1表示最少几个，数字2表示最多几个。
		 *  		{数字1，}表示至少数字1个字符，没有逗号表示固定位数
		 *  		| 表示 或者
		 *  		\ 表示正则表达式的转义字符，在字符串中必须写2个\（在java中也是转义字符）
		 *  		+： 一到多个
		 *  		？： 0到1个
		 *  		*：  0到多个
		 *  		\d：代表数字，大写与之相反
		 *  		\w: 代表数字字母下划线，大写与之相反
		 *  

			String -----> StringBuffer


		 *  StringBuffer sbf1=new StringBuffer("字符串");//字符串转成StringBuffer
		 *  引用类型：在同一空间内改变其中的值，性能比String高，
		 *  	引用传递：
		 *  		StringBuffer sbf=new StringBuffer("aaa");
		 *  		StringBuffer sbf2=sbf;
		 *  		sbf2.append(" hello");
		 *  		sbf2发生改变
		 *  		sbf1也会发生改变，因为同一地址
			A   同一对象 =对象.append(要添加的字符串);//末尾添加新字符串
			B   同一对象 =对象.insert(插入位置，要插入的字符串);//在插入位置处，插入新字符串


	StringBuffer -----> String

			C   String 字符串对象=对象.toString();//转回字符串
			




 */
import java.util.Arrays;
import java.util.Scanner;

public class Demo {
	static String str1 = "Hello";
	static String str2 = "尹纪杰I love you !";

	public static void main(String[] args) {
		System.out.println("测试toUpperCase");
		String str3 = str1.toUpperCase();
		System.out.println(str3);
		str3 = str1.toLowerCase();
		System.out.println(str3);
		{
			System.out.println("字符串拼接");
			String tmp = str1.toUpperCase().concat(str2);
			System.out.println(tmp);
		}
		int index = str1.indexOf('l');
		System.out.println(index);
		int index2 = str1.lastIndexOf("l");
		System.out.println(index2);

		{
			String tmp = str1.substring(2, 4);
			System.out.println("\"Hello\".substring(2,4):" + tmp);
		}
		String song = "好可惜 演唱：庄心妍 忘记 想要忘谈何容易 不怨你 "
				+ "是我如此不堪一击 感情深可入海底 爱的真没人能比 "
				+ "这些你从不放在眼里 想你 不只是因为空虚 说到底 "
				+ "是真有感情不骗你 敢与全世界为敌 为了你受尽委屈 "
				+ "这些苦我甚至都愿意 好可惜 终于失去你 对不起 我已经尽力 "
				+ "我没有放弃 只是不见你 以为这样就伤不到自己 好可惜 "
				+ "我们回不去 伤心哭泣变本加厉 我一直婉拒 别人的情意 "
				+ "只为个不确定的你 想你 不只是因为空虚 说到底 "
				+ "是真有感情不骗你 我与全世界为敌 为了你受尽委屈 "
				+ "这些苦我甚至都愿意 好可惜 终于失去你 对不起我已经尽力 "
				+ "我没有放弃 只是不见你 以为这样就伤不到自己 好可惜 "
				+ "我们回不去 伤心哭泣变本加厉 我一直婉拒 别人的情意 "
				+ "只为个不确定的你 其实在心里 我真的好想求你别和我分离 "
				+ "好可惜 终于失去你 对不起 我已经尽力 我没有放弃 只是不见你 "
				+ "以为这样就伤不到自己 好可惜 我们回不去 伤心哭泣变本加厉 "
				+ "我一直婉拒 别人的情意 只为个不确定的你 ";
		System.out.println("整理之前的："+song);
		System.out.println("------------------");
		System.out.println("整理之后的：");
		for (;0 < song.length(); ) {
			int indexsong=song.indexOf(" ");
			System.out.println(song.substring(0,indexsong));
			song = song.substring(indexsong+1);	
		}
		
		
		String split1 = "boo:and:foo";
		for (String str : split1.split(":")) {
			System.out.println(str);
		}System.out.println();
		
		for (String str : split1.split("o")) {
			System.out.println(str);
		}
		System.out.println(split1.split("o").length);
		for (String str : split1.split("oo")) {
			System.out.println(str);
		}
		
		StringBuffer sb = new StringBuffer("aha");
//		sb= "asdasdasd";//不可以
		System.out.println(sb);
		/*for (int j = 0; j < 5; j++) {
			System.out.println("请输入一串数字，我来按照外国习惯分段：");
			Scanner in = new Scanner(System.in);
			Long num = in.nextLong();
			StringBuffer sb1 =new StringBuffer(num.toString());
			int length = sb1.length();
			for (int i = length-3; i > 0; i -=3) {
				sb1 = sb1.insert(i, ",");
			}
			System.out.println(sb1);
		}*/
		System.out.println("请输入一串数字，我来按照外国习惯分段：");
	//	Scanner in = new Scanner(System.in);
		//int num = in.nextInt();
		StringBuffer sb1 =new StringBuffer(123123);
		int length = sb1.length();
		for (int i = length-2; i > 0; i -=3) {
			sb1 = sb1.insert(i, ",");
		}
		System.out.println(sb1);
		
		int[] a ={1,2,3,4,3,4,5,6};
		String[] sa = {"110","asd","qwe"};
		//int index = Arrays.binarySearch(a, 3);
		int indexi = Arrays.binarySearch(sa, "asd");
		System.out.println(sa[indexi]);
		String str = new String();
		str="aaaaa";
		System.out.println(str);
		
		System.out.println();
		System.out.println("abc");
	    String cde = "cde";
	    System.out.println("abc" + cde);
	    String c = "abc".substring(2,3);
	    String de = cde.substring(1, 3);
	    System.out.println("c = "+c);
	    System.out.println("de = "+de);
	}
}
